diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
index bd119a6..e4d10c8 100644
--- a/drivers/pwm/Makefile
+++ b/drivers/pwm/Makefile
@@ -15,7 +15,7 @@
 obj-$(CONFIG_PWM_CADENCE_TTC)	+= pwm-cadence-ttc.o
 obj-$(CONFIG_PWM_CROS_EC)	+= cros_ec_pwm.o
 obj-$(CONFIG_PWM_EXYNOS)	+= exynos_pwm.o
-obj-$(CONFIG_PWM_IMX)		+= pwm-imx.o pwm-imx-util.o
+obj-$(CONFIG_PWM_IMX)		+= pwm-imx.o
 obj-$(CONFIG_PWM_MESON)		+= pwm-meson.o
 obj-$(CONFIG_PWM_MTK)		+= pwm-mtk.o
 obj-$(CONFIG_PWM_ROCKCHIP)	+= rk_pwm.o
diff --git a/drivers/pwm/pwm-imx-util.c b/drivers/pwm/pwm-imx-util.c
deleted file mode 100644
index 823a9d2..0000000
--- a/drivers/pwm/pwm-imx-util.c
+++ /dev/null
@@ -1,80 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * (C) Copyright 2014
- * Heiko Schocher, DENX Software Engineering, hs@denx.de.
- *
- * Basic support for the pwm module on imx6.
- *
- * Based on linux:drivers/pwm/pwm-imx.c
- * from
- * Sascha Hauer <s.hauer@pengutronix.de>
- */
-
-#include <common.h>
-#include <div64.h>
-#include <asm/arch/imx-regs.h>
-
-/* pwm_id from 0..7 */
-struct pwm_regs *pwm_id_to_reg(int pwm_id)
-{
-	switch (pwm_id) {
-	case 0:
-		return (struct pwm_regs *)PWM1_BASE_ADDR;
-	case 1:
-		return (struct pwm_regs *)PWM2_BASE_ADDR;
-#ifdef CONFIG_MX6
-	case 2:
-		return (struct pwm_regs *)PWM3_BASE_ADDR;
-	case 3:
-		return (struct pwm_regs *)PWM4_BASE_ADDR;
-#endif
-#ifdef CONFIG_MX6SX
-	case 4:
-		return (struct pwm_regs *)PWM5_BASE_ADDR;
-	case 5:
-		return (struct pwm_regs *)PWM6_BASE_ADDR;
-	case 6:
-		return (struct pwm_regs *)PWM7_BASE_ADDR;
-	case 7:
-		return (struct pwm_regs *)PWM8_BASE_ADDR;
-#endif
-	default:
-		printf("unknown pwm_id: %d\n", pwm_id);
-		break;
-	}
-	return NULL;
-}
-
-int pwm_imx_get_parms(int period_ns, int duty_ns, unsigned long *period_c,
-		      unsigned long *duty_c, unsigned long *prescale)
-{
-	unsigned long long c;
-
-	/*
-	 * we have not yet a clock framework for imx6, so add the clock
-	 * value here as a define. Replace it when we have the clock
-	 * framework.
-	 */
-	c = CONFIG_IMX6_PWM_PER_CLK;
-	c = c * period_ns;
-	do_div(c, 1000000000);
-	*period_c = c;
-
-	*prescale = *period_c / 0x10000 + 1;
-
-	*period_c /= *prescale;
-	c = *period_c * (unsigned long long)duty_ns;
-	do_div(c, period_ns);
-	*duty_c = c;
-
-	/*
-	 * according to imx pwm RM, the real period value should be
-	 * PERIOD value in PWMPR plus 2.
-	 */
-	if (*period_c > 2)
-		*period_c -= 2;
-	else
-		*period_c = 0;
-
-	return 0;
-}
diff --git a/drivers/pwm/pwm-imx-util.h b/drivers/pwm/pwm-imx-util.h
deleted file mode 100644
index 82c61d7..0000000
--- a/drivers/pwm/pwm-imx-util.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * (C) Copyright 2014
- * Heiko Schocher, DENX Software Engineering, hs@denx.de.
- *
- * Basic support for the pwm module on imx6.
- */
-
-#ifndef _pwm_imx_util_h_
-#define _pwm_imx_util_h_
-
-struct pwm_regs *pwm_id_to_reg(int pwm_id);
-int pwm_imx_get_parms(int period_ns, int duty_ns, unsigned long *period_c,
-		      unsigned long *duty_c, unsigned long *prescale);
-#endif
diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c
index ce1290a..1d656e7 100644
--- a/drivers/pwm/pwm-imx.c
+++ b/drivers/pwm/pwm-imx.c
@@ -13,7 +13,6 @@
 #include <pwm.h>
 #include <asm/arch/imx-regs.h>
 #include <asm/io.h>
-#include "pwm-imx-util.h"
 
 int pwm_init(int pwm_id, int div, int invert)
 {
@@ -45,6 +44,72 @@
 	return 0;
 }
 
+/* pwm_id from 0..7 */
+struct pwm_regs *pwm_id_to_reg(int pwm_id)
+{
+
+	switch (pwm_id) {
+	case 0:
+		return (struct pwm_regs *)PWM1_BASE_ADDR;
+	case 1:
+		return (struct pwm_regs *)PWM2_BASE_ADDR;
+#ifdef CONFIG_MX6
+	case 2:
+		return (struct pwm_regs *)PWM3_BASE_ADDR;
+	case 3:
+		return (struct pwm_regs *)PWM4_BASE_ADDR;
+#endif
+#ifdef CONFIG_MX6SX
+	case 4:
+		return (struct pwm_regs *)PWM5_BASE_ADDR;
+	case 5:
+		return (struct pwm_regs *)PWM6_BASE_ADDR;
+	case 6:
+		return (struct pwm_regs *)PWM7_BASE_ADDR;
+	case 7:
+		return (struct pwm_regs *)PWM8_BASE_ADDR;
+#endif
+	default:
+		printf("unknown pwm_id: %d\n", pwm_id);
+		break;
+	}
+	return NULL;
+}
+
+int pwm_imx_get_parms(int period_ns, int duty_ns, unsigned long *period_c,
+		      unsigned long *duty_c, unsigned long *prescale)
+{
+	unsigned long long c;
+
+	/*
+	 * we have not yet a clock framework for imx6, so add the clock
+	 * value here as a define. Replace it when we have the clock
+	 * framework.
+	 */
+	c = CONFIG_IMX6_PWM_PER_CLK;
+	c = c * period_ns;
+	do_div(c, 1000000000);
+	*period_c = c;
+
+	*prescale = *period_c / 0x10000 + 1;
+
+	*period_c /= *prescale;
+	c = *period_c * (unsigned long long)duty_ns;
+	do_div(c, period_ns);
+	*duty_c = c;
+
+	/*
+	 * according to imx pwm RM, the real period value should be
+	 * PERIOD value in PWMPR plus 2.
+	 */
+	if (*period_c > 2)
+		*period_c -= 2;
+	else
+		*period_c = 0;
+
+	return 0;
+}
+
 int pwm_config(int pwm_id, int duty_ns, int period_ns)
 {
 	struct pwm_regs *pwm = (struct pwm_regs *)pwm_id_to_reg(pwm_id);
